using System;
using System.Collections.Generic;

namespace SIP.PN.Modelo.Entidades
{
    public abstract class Evaluacion
    {
        private int codigo;
        private int puntajePromedio;
        private DateTime fechaEvaluacion;
        private IList<EvaluacionConcepto> conceptos;

        public virtual int Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }

        public virtual int PuntajePromedio
        {
            get { return puntajePromedio; }
            set { puntajePromedio = value; }
        }

        public virtual IList<EvaluacionConcepto> Conceptos
        {
            get { return conceptos; }
            set { conceptos = value; }
        }

        public virtual DateTime FechaEvaluacion
        {
            get { return fechaEvaluacion; }
            set { fechaEvaluacion = value; }
        }

        #region Metodos

        public virtual void EvaluarConcepto(Concepto conceto, int puntaje)
        {
            EvaluacionConcepto evaluacionConcepto = ObtenerEvaluacionConcepto(conceto);
            if (evaluacionConcepto == null)
                conceptos.Add(new EvaluacionConcepto(this, conceto, puntaje));
            else
                evaluacionConcepto.Puntaje = puntaje;
        }

        public virtual EvaluacionConcepto ObtenerEvaluacionConcepto(Concepto concepto)
        {
            foreach (EvaluacionConcepto evaluacionConcepto in Conceptos)
            {
                if (evaluacionConcepto.Concepto.Equals(concepto))
                    return evaluacionConcepto;
            }
            return null;
        }

        #endregion

        #region Metodos Sobreescritos

        public override bool Equals(object obj)
        {
            Evaluacion otro = obj as Evaluacion;
            if (otro == null) return false;
            return Codigo.Equals(otro.Codigo);
        }

        public override int GetHashCode()
        {
            return string.Format("{0}-{1}", GetType(), ToString()).GetHashCode();
        }

        public override string ToString()
        {
            return Codigo.ToString();
        }

        #endregion
    }
}
